1. Field of the Invention
The present invention relates to a method, system, and program for performing a recovery action in response to a credit depletion notification.
2. Description of the Related Art
Devices in a network, such as a Storage Area Network (SAN) communicate frames to each other via ports. Certain network components, such as SAN switches and edge devices use a buffer-to-buffer credit management technique, defined in the fibre channel protocol specification, where credit is assigned to a connected remote transmitting port indicating a number of frames the transmitting port may have outstanding to the receiving port before the receiving port indicates it has additional buffer space available. The credit value may indicate the number of buffers that are allocated by the receiving port for use to store frames sent by the sending port. Credit is given to account for the lag time between when a frame is sent, the frame is captured by the receiving port, stored in a buffer, processed, said buffer freed, and a signal is sent from the receiving port to the transmitting port indicating that the buffer is again available. Because the transmitting port has credit, it may send a number of outstanding frames corresponding to the credit value before the transmitting port must wait to receive additional credit.
Whenever the transmitting port sends a frame, the transmitting port decrements the port pair credit and upon receiving a receiver-ready (R_RDY) ordered set, as known in the art, indicating that the receiving port processed the frame, increments the credit. In current art, the transmitting port may occasionally consume all of the credit and be unable to transfer frames. This may occur, for instance, if there are network transmission errors that corrupt the R_RDY ordered sets, preventing the transmitting port from receiving them. Another potential cause arises when the credit amount assigned to a transmitting port is not enough to allow maximum throughput because there are too many frames in flight, meaning that the credit is used faster than it can be replenished. In this circumstance, performance can be approved by allocating more buffer space, and hence more credit, to an especially busy port, but there is currently no way to detect when a port is running out of credit.
If the transmitting port no longer has any credit, the transmitting port cannot send any frames and must wait for either an R_RDY or a timeout condition and link recovery. If there is no indication that the transmitting port is out of credit, the problem may not be easily recognized by the receiving port, nor the system, and may remain uncorrected.